/*
 * StrahlentherapiePSEnergyDep3D.hh
 *
 *  Created on: Nov 27, 2010
 *      Author: holger
 */

#ifndef StrahlentherapiePSEnergyDep3D_h
#define StrahlentherapiePSEnergyDep3D_h 1

#include "StrahlentherapieVPrimitiveScorer3D.hh"

class StrahlentherapiePSEnergyDep3D : public StrahlentherapieVPrimitiveScorer3D
{
	public:
		StrahlentherapiePSEnergyDep3D(G4String name, G4int ni=1, G4int nj=1, G4int nk=1, G4int depi=0, G4int depj=1, G4int depk=2);
		virtual ~StrahlentherapiePSEnergyDep3D() {}
		
	protected:
		G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist);		
};

StrahlentherapiePSEnergyDep3D::StrahlentherapiePSEnergyDep3D(G4String name, G4int ni, G4int nj, G4int nk, G4int depi, G4int depj, G4int depk) : StrahlentherapieVPrimitiveScorer3D(name, ni, nj, nk, depi, depj, depk)
{}

G4bool StrahlentherapiePSEnergyDep3D::ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist)
{
	G4double edep = aStep->GetTotalEnergyDeposit();
	if ( edep == 0. ) return false;
	if(aStep->GetPreStepPoint()->GetWeight() != 1) {
		G4cerr << "WARNING: Particle Weight is " << aStep->GetPreStepPoint()->GetWeight() << ". Look at StrahlentherapiePSEnergyDep3D.hh." << G4endl;
	}
	// das multiplizieren mit dem Partikelgewicht wird bei den vorgegebenen Klassen,
	// z.B. G4PSEnergyDeposit so gemacht, da das aber anscheinend immer 1 ist, ist es egal.
	// Das Gleiche gilt für StrahlentherapiePSDoseDep3D
//	edep *= aStep->GetPreStepPoint()->GetWeight(); // (Particle Weight)
	G4int  index = GetIndex(ROhist);
	EvtMap->add(index, edep);
	return true;
}

#endif
